#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <embaralhar.h>
#include <retira.h>

/*!Imprime as cartas de um baralho.
 *@param B - Baralho que vai ser imprimido.
 */
void imprime(Baralho B){
        Baralho aux = B;
        char *strings[4] = { "Copas", "Espadas", "Ouros", "Paus" };
        while (aux!= NULL){
                printf(" %d de %s\n", aux->carta, strings[aux->naipe]);
                aux = aux->prox;
        }
}

/*!Testa se o valor digitado e um inteiro.
 *@param B - Valor que vai ser testado.
 */
int testaString(char string[]){
	int i;
	for (i = 0; i < strlen(string); i++){
        if ( (string[i] >= '0' && string[i] <= '9') == 0)
            return 0;
    }
	return atoi(string);
}

int main(){
    char nome[20], trataStringAposta[20];
    Baralho B = cria();
    Baralho player = cria();
    Baralho mesa = cria();
    lista C;
    int fichas = 500, aposta=0, i=0, pontosPlayer=0, pontosMesa=0, fim=0, opcao=-1;
	char *strings[4] = { "Copas", "Espadas", "Ouros", "Paus" };

    printf("\nDigite seu nome: ");
    gets(nome);


	while(fichas>0){
		printf("\nVoce tem %d reais em fichas\n", fichas);
		printf("\nDigite o valor de sua aposta: ");
		aposta=testaString(gets(trataStringAposta));

		while(aposta>fichas||aposta<1){
			printf("\nValor invalido\n");
			printf("\nVoce tem %d reais em fichas\n", fichas);
			printf("\nDigite o valor de sua aposta: ");
			aposta=testaString(gets(trataStringAposta));
		}

		B = embaralhar(B);

		for(i=0;i<2;i++){
			C = retiraInicio(&B);
			insereAux(&mesa, C.carta, C.naipe);
			if(C.carta>10)
				C.carta=10;
			pontosMesa=pontosMesa+C.carta;
			C = retiraInicio(&B);
			insereAux(&player, C.carta, C.naipe);
			if(C.carta>10)
				C.carta=10;
			pontosPlayer=pontosPlayer+C.carta;
		}
		printf("Cartas da Mesa:\n");
		printf(" %d de %s\n", mesa->carta, strings[mesa->naipe]);

		printf("\nCartas de %s:\n", nome);
		imprime(player);
		printf("Você tem %d pontos\n\n",pontosPlayer);

		do{
			i=0;
			printf("Digite 1 para pedir uma nova carta\n\nDigite 2 para passar a vez\n\nDigite 3 para Sair\n\n");
			opcao=testaString(gets(trataStringAposta));

			while((opcao!=1) && (opcao!=2) && (opcao!=3)){
				printf("Opçao inválida\n\n");
				printf("Digite 1 para pedir uma nova carta\n\nDigite 2 para passar a vez\n\nDigite 3 para Sair\n\n");
				opcao=testaString(gets(trataStringAposta));
			}

			if(opcao==1){
				C = retiraInicio(&B);
				insereAux(&player, C.carta, C.naipe);
				if(C.carta>10)
					C.carta=10;
				pontosPlayer=pontosPlayer+C.carta;
				printf("\nCartas de %s:\n", nome);
				imprime(player);
				printf("Você tem %d pontos\n\n",pontosPlayer);
				if(pontosPlayer>21){
					printf("Vitoria da mesa\n\n");
					fichas=fichas-aposta;
					i=1;
				}
			}

			if(opcao==2){
				printf("\nCartas de %s:\n", nome);
				imprime(player);
				printf("Você tem %d pontos\n\n",pontosPlayer);

				printf("\nCartas da mesa:\n");
				imprime(mesa);
				printf("A mesa tem tem %d pontos\n\n",pontosMesa);

				while((pontosMesa<pontosPlayer)&&(pontosMesa<22)){
					printf("A mesa pediu uma carta\n\n");

					printf("\nCartas de %s:\n", nome);
					imprime(player);
					printf("Você tem %d pontos\n\n",pontosPlayer);

					printf("\nCartas da mesa:\n");
					imprime(mesa);
					pontosMesa=pontosMesa+C.carta;

					printf("A mesa tem tem %d pontos\n\n",pontosMesa);

				}

				if(pontosMesa>21){
					printf("Voce venceu!!!");
					fichas=fichas+aposta;
				}else{
					printf("Vitoria da mesa\n\n");
					fichas=fichas-aposta;
				}
				i=1;
			}

			if(opcao==3){
				fichas=0;
				i=1;
			}

		}while(i==0);

		pontosMesa=0;
		pontosPlayer=0;
	}
}
